/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Classes;

/**
 *
 * @author Gustavo-Note
 */
public class Triangulo {

    public double getLadoA() {
        return ladoA;
    }

    public void setLadoA(double ladoA) throws AppException {
        if(ladoA <= 0) {
            throw new AppException(MSG_LADO_NEGATIVO);
        }
        else if(ladoA >= (ladoB + ladoC)) {
            throw new AppException(MSG_LADO_INCONSISTENTE);
        }
        else {
            this.ladoA = ladoA;
        }
    }

    public double getLadoB() {
        return ladoB;
    }

    public void setLadoB(double ladoB) throws AppException {
        if(ladoB <= 0) {
            throw new AppException(MSG_LADO_NEGATIVO);
        }
        else if(ladoB >= (ladoA + ladoC)) {
            throw new AppException(MSG_LADO_INCONSISTENTE);
        }
        else{
            this.ladoB = ladoB;
        }
             
    }

    public double getLadoC() {
        return ladoC;
    }

    public void setLadoC(double ladoC) throws AppException {
        if(ladoC <= 0) {
            throw new AppException(MSG_LADO_NEGATIVO);
        }
        else if(ladoC >= (ladoB + ladoA)) {
            throw new AppException(MSG_LADO_INCONSISTENTE);
        }
        else {
            this.ladoC = ladoC;
        }
    }

    public Triangulo(double ladoA, double ladoB, double ladoC) throws AppException {
        if(ladoA >= ladoB + ladoC || ladoB >= ladoA + ladoC || ladoC >= ladoB + ladoA){
            throw new AppException(MSG_LADO_INCONSISTENTE);
        }
        else if(ladoA <= 0 || ladoB <= 0 || ladoC <= 0){
            throw new AppException(MSG_LADO_NEGATIVO);
        }
        else {
            this.ladoA = ladoA;
            this.ladoB = ladoB;
            this.ladoC = ladoC;
        }
    }
    
    public String tipo() {
        if(ladoA == ladoB && ladoA == ladoC) {
            return "Eqüilátero";
        }
        else if(ladoA == ladoB || ladoA == ladoC || ladoB == ladoC) {
            return "Isósceles";
        }
        else {
            return "Escaleno";
        }
    }
    
    public double area() {
        double aux = (ladoA + ladoB + ladoC)/2;
        return Math.sqrt(aux * (aux - ladoA) * (aux - ladoB) * (aux - ladoC));
    }
    
    public double perimetro() {
        return ladoA + ladoB + ladoC;
    }
    
    private double ladoA;
    private double ladoB;
    private double ladoC;
    
    public static final String MSG_LADO_NEGATIVO = "Lado não pode ser negativo.";
    public static final String MSG_LADO_INCONSISTENTE = "Lado não pode ser menor que a soma dos outros dois.";
        
}
